#ifndef CSTATEMANAGER_H
#define CSTATEMANAGER_H

#include <QGLWidget>
#include <QHash>
#include <QQueue>

class CState;                           // state'o templeitas

class CStateManager : public QGLWidget
{
public:
    CStateManager();
    ~CStateManager();

    void setState(CState * newState);   // perjungimas į kitą state'ą
    CState * getState();                // dabartinio state'o perdavimas

    void init();                        // inicijavimo veiksmai
    void draw();                        // piešimo metodas

    // mygtukų paspaudimai ir valdymo apdorojimas
    void handleKeys(QKeyEvent * e, bool isPressed);
    void handleControls();

    int  doLogic();                     // logikos veiksmai
    void st_add(CState * st) { this->Sl.append(st); };

protected:
    void st_init();
    // GL Metodai
    void resizeGL(int width, int height);
    void paintGL();
    void initializeGL();

private:
    CState * currGameState;             // dabartinis (aktyvusis) state
    bool initialized;
    QHash<int,bool> Kh;                 // Mygtukų būsenų lentelė
    QQueue<int> Kq;                     // Paspaustų mygtukų eilė
    QList<int> Kl;                      // Papsaustų mygtukų sąrašas
    QList<CState *> Sl;                 // State'ų sąrašas

};

#endif // CSTATEMANAGER_H
